In [131]:
#for loading/processing the images  
from keras.preprocessing.image import load_img 
from keras.preprocessing.image import img_to_array 
from keras.applications.vgg16 import preprocess_input 

# models 
from keras.applications.vgg16 import VGG16 
from keras.models import Model

# clustering and dimension reduction
from sklearn.cluster import KMeans, DBSCAN
from sklearn.decomposition import PCA
from sklearn.metrics import homogeneity_score, silhouette_score

# for everything else
import os
import numpy as np
import matplotlib.pyplot as plt
from random import randint
import pandas as pd
import pickle
from mpl_toolkits.mplot3d import Axes3D

Read file¶

In [132]:
path = './flower_images'
images = []
names = []

for filename in os.listdir(path):
    if filename.endswith('.png'):
        img_path = os.path.join(path, filename)
        img = load_img(img_path, target_size=(224,224))
        img = img_to_array(img).reshape(1,224,224,3)
        img = preprocess_input(img)
        images.append(img)
        names.append(filename)
In [133]:
df = pd.read_csv('./flower_images/flower_labels.csv')
real_labels = [df[df['file'] == i]['label'].iloc[0] for i in names]

VGG16¶

In [188]:
model = VGG16()
model = Model(inputs = model.inputs, outputs = model.layers[-2].output)

features = np.array([model.predict(i) for i in images]).reshape(-1,4096)
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 666ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 417ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 372ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 389ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 393ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 412ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 448ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 474ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 445ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 379ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 385ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 445ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 419ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 428ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 446ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 393ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 390ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 374ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 431ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 392ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 396ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 388ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 397ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 381ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 368ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 383ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 403ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 442ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 371ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 457ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 340ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 380ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 385ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 430ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 402ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 385ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 368ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 436ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 396ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 429ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 510ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 497ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 486ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 622ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 501ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 567ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 583ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 424ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 422ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 698ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 412ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 390ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 444ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 359ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 409ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 366ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 387ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 457ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 342ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 364ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 346ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 372ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 442ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 379ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 375ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 451ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 428ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 400ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 361ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 422ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 410ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 404ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 457ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 402ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 524ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 498ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 479ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 489ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 540ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 384ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 442ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 637ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 488ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 392ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 426ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 405ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 361ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 444ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 504ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 560ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 451ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 514ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 477ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 426ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 388ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 386ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 498ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 533ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 471ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 429ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 383ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 403ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 437ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 380ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 498ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 524ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 580ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 587ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 541ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 818ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 1s/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 644ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 706ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 739ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 660ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 535ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 762ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 636ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 659ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 604ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 750ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 655ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 393ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 353ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 373ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 375ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 366ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 371ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 344ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 382ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 424ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 359ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 376ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 394ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 353ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 396ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 360ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 354ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 385ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 378ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 358ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 385ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 366ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 354ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 352ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 388ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 370ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 367ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 357ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 350ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 366ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 347ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 366ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 375ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 377ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 499ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 364ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 365ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 379ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 336ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 380ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 379ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 362ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 371ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 364ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 379ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 353ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 363ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 355ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 376ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 378ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 359ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 345ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 371ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 373ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 363ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 370ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 377ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 355ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 351ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 407ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 369ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 385ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 466ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 438ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 382ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 454ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 730ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 621ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 596ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 551ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 464ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 1s 694ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 482ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 471ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 413ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 424ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 466ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 463ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 395ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 346ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 361ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 402ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 398ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 418ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 359ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 392ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 363ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 352ms/step
1/1 ━━━━━━━━━━━━━━━━━━━━ 0s 381ms/step

k-mean and dbscan¶

In [189]:
def convert_to_list_of_cluster(names, clusters):
    groups = {cluster: [] for cluster in clusters}
    for name, cluster in zip(names, clusters):
            groups[cluster].append(name)
    return groups
In [190]:
def show_cluster(files):
    plt.figure(figsize = (25,25))
    for index, file in enumerate(files):
        plt.subplot(15,15,index+1)
        img = load_img('./flower_images/' + file)
        img = np.array(img)
        plt.imshow(img)
        plt.axis('off')
In [207]:
kmeans = KMeans(n_clusters=len(df['label'].unique()))
kmeans.fit(features)
print(homogeneity_score(kmeans.labels_, real_labels))
print(silhouette_score(features, kmeans.labels_))
groups = convert_to_list_of_cluster(names, kmeans.labels_)
for i in groups.values():
    show_cluster(i)
/home/mvajhi/.local/lib/python3.10/site-packages/sklearn/cluster/_kmeans.py:1412: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning
  super()._check_params_vs_input(X, default_n_init=10)
0.6575521994536476
0.09712848
In [192]:
pca_3d = PCA(n_components=3).fit_transform(features)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(pca_3d[:, 0], pca_3d[:, 1], pca_3d[:, 2], c=kmeans.labels_, cmap='viridis')
ax.set_title('K-means Clustering with 3D PCA')
plt.show()
In [193]:
pca_2d = PCA(n_components=2).fit_transform(features)

fig = plt.figure()
plt.scatter(pca_2d[:, 0], pca_2d[:, 1], c=kmeans.labels_, cmap='viridis')
plt.title('K-means Clustering with PCA')
Out[193]:
Text(0.5, 1.0, 'K-means Clustering with PCA')
In [204]:
sse = []
list_k = list(range(5, 15))

for k in list_k:
    km = KMeans(n_clusters=k)
    km.fit(features)
    
    sse.append(km.inertia_)

# Plot sse against k
plt.figure(figsize=(6, 6))
plt.plot(list_k, sse)
plt.xlabel(r'Number of clusters *k*')
plt.ylabel('Sum of squared distance')
/home/mvajhi/.local/lib/python3.10/site-packages/sklearn/cluster/_kmeans.py:1412: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning
  super()._check_params_vs_input(X, default_n_init=10)
/home/mvajhi/.local/lib/python3.10/site-packages/sklearn/cluster/_kmeans.py:1412: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning
  super()._check_params_vs_input(X, default_n_init=10)
/home/mvajhi/.local/lib/python3.10/site-packages/sklearn/cluster/_kmeans.py:1412: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning
  super()._check_params_vs_input(X, default_n_init=10)
/home/mvajhi/.local/lib/python3.10/site-packages/sklearn/cluster/_kmeans.py:1412: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning
  super()._check_params_vs_input(X, default_n_init=10)
/home/mvajhi/.local/lib/python3.10/site-packages/sklearn/cluster/_kmeans.py:1412: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning
  super()._check_params_vs_input(X, default_n_init=10)
/home/mvajhi/.local/lib/python3.10/site-packages/sklearn/cluster/_kmeans.py:1412: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning
  super()._check_params_vs_input(X, default_n_init=10)
/home/mvajhi/.local/lib/python3.10/site-packages/sklearn/cluster/_kmeans.py:1412: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning
  super()._check_params_vs_input(X, default_n_init=10)
/home/mvajhi/.local/lib/python3.10/site-packages/sklearn/cluster/_kmeans.py:1412: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning
  super()._check_params_vs_input(X, default_n_init=10)
/home/mvajhi/.local/lib/python3.10/site-packages/sklearn/cluster/_kmeans.py:1412: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning
  super()._check_params_vs_input(X, default_n_init=10)
/home/mvajhi/.local/lib/python3.10/site-packages/sklearn/cluster/_kmeans.py:1412: FutureWarning: The default value of `n_init` will change from 10 to 'auto' in 1.4. Set the value of `n_init` explicitly to suppress the warning
  super()._check_params_vs_input(X, default_n_init=10)
Out[204]:
Text(0, 0.5, 'Sum of squared distance')
In [195]:
for i in np.arange(43,60,0.1):
    print(f'run for {i}')
    for j in range(2,5):
        dbscan = DBSCAN(eps=i, min_samples=j)
        dbscan.fit(features)
        groups = convert_to_list_of_cluster(names, dbscan.labels_)
        if 13 > len(groups.keys()) > 8:
            print(f'{i:.2f}, {j}, {len(groups[-1])}, {homogeneity_score(dbscan.labels_, real_labels):.2f}')
run for 1.0
210
1
run for 1.1
210
1
run for 1.2000000000000002
210
1
run for 1.3000000000000003
210
1
run for 1.4000000000000004
210
1
run for 1.5000000000000004
210
1
run for 1.6000000000000005
210
1
run for 1.7000000000000006
210
1
run for 1.8000000000000007
210
1
run for 1.9000000000000008
210
1
In [196]:
for k in range(80,100):
    print(f'run for {k}')
    pca = PCA(n_components=k).fit_transform(features)
    for i in np.arange(45,60,0.1):
        for j in range(2,6):
            dbscan = DBSCAN(eps=i, min_samples=j)
            dbscan.fit(pca)
            groups = convert_to_list_of_cluster(names, dbscan.labels_)
            if 13 > len(groups.keys()) > 8 and len(groups[-1]) < 40:
                print(f'{i:.2f}, {j}, {k}, {len(groups[-1])}, {homogeneity_score(dbscan.labels_, real_labels):.2f}')
run for 80
46.20, 2, 80, 89, 0.43
46.60, 2, 80, 83, 0.41
46.70, 2, 80, 82, 0.41
46.80, 2, 80, 82, 0.41
46.90, 2, 80, 81, 0.42
47.00, 2, 80, 79, 0.42
47.10, 2, 80, 77, 0.42
47.20, 2, 80, 76, 0.42
47.30, 2, 80, 73, 0.42
47.40, 2, 80, 71, 0.43
47.50, 2, 80, 71, 0.43
47.60, 2, 80, 71, 0.43
47.70, 2, 80, 70, 0.42
47.80, 2, 80, 69, 0.43
47.90, 2, 80, 69, 0.43
48.00, 2, 80, 69, 0.43
48.10, 2, 80, 69, 0.43
48.20, 2, 80, 69, 0.43
48.30, 2, 80, 68, 0.43
48.40, 2, 80, 68, 0.43
48.50, 2, 80, 67, 0.42
48.60, 2, 80, 67, 0.42
48.70, 2, 80, 67, 0.42
48.80, 2, 80, 65, 0.42
48.90, 2, 80, 64, 0.42
49.00, 2, 80, 63, 0.42
49.10, 2, 80, 63, 0.42
49.20, 2, 80, 63, 0.42
49.30, 2, 80, 61, 0.43
49.40, 2, 80, 61, 0.43
49.50, 2, 80, 60, 0.30
49.60, 2, 80, 58, 0.30
49.70, 2, 80, 58, 0.30
49.80, 2, 80, 57, 0.31
49.90, 2, 80, 57, 0.31
50.00, 2, 80, 57, 0.31
50.10, 2, 80, 57, 0.31
50.20, 2, 80, 57, 0.31
50.30, 2, 80, 57, 0.31
50.40, 2, 80, 57, 0.31
50.50, 2, 80, 57, 0.31
50.60, 2, 80, 56, 0.30
50.70, 2, 80, 55, 0.30
50.80, 2, 80, 54, 0.30
50.90, 2, 80, 53, 0.30
51.00, 2, 80, 53, 0.30
51.70, 2, 80, 48, 0.30
51.80, 2, 80, 48, 0.30
51.90, 2, 80, 48, 0.30
52.00, 2, 80, 48, 0.30
52.10, 2, 80, 48, 0.30
52.20, 2, 80, 48, 0.30
52.30, 2, 80, 48, 0.30
52.40, 2, 80, 48, 0.30
52.50, 2, 80, 47, 0.29
52.60, 2, 80, 46, 0.30
52.70, 2, 80, 46, 0.30
run for 81
46.40, 2, 81, 89, 0.43
46.50, 2, 81, 88, 0.43
46.60, 2, 81, 86, 0.42
46.70, 2, 81, 85, 0.42
47.30, 2, 81, 79, 0.43
47.40, 2, 81, 78, 0.42
47.50, 2, 81, 77, 0.42
47.60, 2, 81, 75, 0.41
47.70, 2, 81, 74, 0.41
47.80, 2, 81, 74, 0.41
47.90, 2, 81, 71, 0.42
48.00, 2, 81, 71, 0.42
48.10, 2, 81, 70, 0.42
48.20, 2, 81, 70, 0.42
48.30, 2, 81, 69, 0.43
48.40, 2, 81, 69, 0.43
48.50, 2, 81, 69, 0.43
48.60, 2, 81, 68, 0.42
48.70, 2, 81, 68, 0.42
48.80, 2, 81, 66, 0.41
48.90, 2, 81, 65, 0.42
49.00, 2, 81, 65, 0.42
49.10, 2, 81, 65, 0.42
49.20, 2, 81, 65, 0.42
49.30, 2, 81, 65, 0.42
49.40, 2, 81, 62, 0.42
49.50, 2, 81, 62, 0.42
49.60, 2, 81, 62, 0.42
49.70, 2, 81, 61, 0.30
49.80, 2, 81, 60, 0.30
49.90, 2, 81, 60, 0.30
50.00, 2, 81, 57, 0.31
50.10, 2, 81, 57, 0.31
50.20, 2, 81, 57, 0.31
50.30, 2, 81, 56, 0.31
50.40, 2, 81, 56, 0.31
50.50, 2, 81, 56, 0.31
50.60, 2, 81, 56, 0.31
50.70, 2, 81, 55, 0.30
50.80, 2, 81, 54, 0.30
50.90, 2, 81, 54, 0.30
51.00, 2, 81, 53, 0.30
51.10, 2, 81, 52, 0.30
51.20, 2, 81, 52, 0.30
51.30, 2, 81, 51, 0.30
51.40, 2, 81, 51, 0.30
51.50, 2, 81, 50, 0.30
51.60, 2, 81, 50, 0.30
52.20, 2, 81, 46, 0.29
52.30, 2, 81, 46, 0.29
52.40, 2, 81, 46, 0.29
52.50, 2, 81, 45, 0.29
52.60, 2, 81, 45, 0.29
52.70, 2, 81, 45, 0.29
52.80, 2, 81, 45, 0.29
52.90, 2, 81, 45, 0.29
53.00, 2, 81, 45, 0.29
run for 82
46.30, 2, 82, 88, 0.43
46.40, 2, 82, 88, 0.43
46.50, 2, 82, 88, 0.43
46.60, 2, 82, 87, 0.43
46.70, 2, 82, 85, 0.43
46.80, 2, 82, 84, 0.43
46.90, 2, 82, 82, 0.43
47.00, 2, 82, 82, 0.43
47.10, 2, 82, 81, 0.43
47.20, 2, 82, 79, 0.42
47.30, 2, 82, 79, 0.42
47.40, 2, 82, 79, 0.42
47.50, 2, 82, 75, 0.42
47.60, 2, 82, 75, 0.42
47.70, 2, 82, 75, 0.42
47.80, 2, 82, 74, 0.41
47.90, 2, 82, 73, 0.41
48.00, 2, 82, 72, 0.42
48.10, 2, 82, 71, 0.41
48.20, 2, 82, 70, 0.41
48.30, 2, 82, 70, 0.41
48.40, 2, 82, 69, 0.42
48.50, 2, 82, 67, 0.42
48.60, 2, 82, 67, 0.42
48.70, 2, 82, 67, 0.42
48.80, 2, 82, 67, 0.42
48.90, 2, 82, 66, 0.42
49.00, 2, 82, 66, 0.42
49.10, 2, 82, 66, 0.42
49.20, 2, 82, 64, 0.42
49.30, 2, 82, 63, 0.42
49.40, 2, 82, 63, 0.42
49.50, 2, 82, 63, 0.42
49.60, 2, 82, 62, 0.42
49.70, 2, 82, 61, 0.30
49.80, 2, 82, 61, 0.30
49.90, 2, 82, 61, 0.30
50.00, 2, 82, 61, 0.30
50.50, 2, 82, 58, 0.30
50.60, 2, 82, 58, 0.30
50.70, 2, 82, 58, 0.30
50.80, 2, 82, 57, 0.29
run for 83
46.60, 2, 83, 88, 0.43
46.70, 2, 83, 88, 0.43
46.80, 2, 83, 85, 0.42
46.90, 2, 83, 84, 0.42
47.00, 2, 83, 84, 0.42
47.10, 2, 83, 83, 0.42
47.20, 2, 83, 82, 0.42
47.30, 2, 83, 82, 0.42
47.40, 2, 83, 82, 0.42
47.50, 2, 83, 80, 0.42
47.60, 2, 83, 79, 0.41
47.70, 2, 83, 79, 0.41
47.80, 2, 83, 76, 0.42
47.90, 2, 83, 73, 0.42
48.00, 2, 83, 72, 0.42
48.10, 2, 83, 72, 0.42
48.20, 2, 83, 72, 0.42
48.30, 2, 83, 72, 0.42
48.40, 2, 83, 71, 0.43
48.50, 2, 83, 70, 0.43
48.60, 2, 83, 69, 0.42
48.70, 2, 83, 69, 0.42
48.80, 2, 83, 69, 0.42
48.90, 2, 83, 69, 0.42
49.00, 2, 83, 68, 0.42
49.10, 2, 83, 68, 0.42
49.20, 2, 83, 65, 0.43
49.30, 2, 83, 65, 0.43
49.40, 2, 83, 64, 0.32
49.50, 2, 83, 63, 0.30
49.60, 2, 83, 63, 0.30
49.70, 2, 83, 63, 0.30
49.80, 2, 83, 63, 0.30
49.90, 2, 83, 62, 0.30
50.00, 2, 83, 62, 0.30
50.10, 2, 83, 61, 0.30
50.20, 2, 83, 61, 0.30
50.30, 2, 83, 59, 0.30
50.40, 2, 83, 59, 0.30
50.50, 2, 83, 59, 0.30
50.60, 2, 83, 59, 0.30
50.70, 2, 83, 59, 0.30
50.80, 2, 83, 58, 0.31
50.90, 2, 83, 58, 0.31
51.00, 2, 83, 58, 0.31
52.30, 2, 83, 48, 0.30
52.40, 2, 83, 48, 0.30
52.50, 2, 83, 46, 0.29
run for 84
46.70, 2, 84, 88, 0.42
46.80, 2, 84, 86, 0.42
46.90, 2, 84, 86, 0.42
47.40, 2, 84, 82, 0.41
47.50, 2, 84, 81, 0.42
47.60, 2, 84, 80, 0.42
47.70, 2, 84, 77, 0.42
47.80, 2, 84, 76, 0.42
47.90, 2, 84, 75, 0.41
48.00, 2, 84, 73, 0.41
48.10, 2, 84, 73, 0.41
48.20, 2, 84, 73, 0.41
48.30, 2, 84, 72, 0.42
48.40, 2, 84, 71, 0.42
48.50, 2, 84, 70, 0.43
48.60, 2, 84, 69, 0.43
48.70, 2, 84, 68, 0.44
48.80, 2, 84, 68, 0.44
48.90, 2, 84, 67, 0.44
49.00, 2, 84, 67, 0.44
49.10, 2, 84, 67, 0.43
49.20, 2, 84, 67, 0.43
49.30, 2, 84, 66, 0.42
49.40, 2, 84, 65, 0.42
49.50, 2, 84, 65, 0.42
49.60, 2, 84, 64, 0.42
49.70, 2, 84, 64, 0.42
49.80, 2, 84, 64, 0.42
49.90, 2, 84, 63, 0.29
50.00, 2, 84, 63, 0.29
50.10, 2, 84, 63, 0.29
50.20, 2, 84, 60, 0.30
50.30, 2, 84, 58, 0.31
50.40, 2, 84, 58, 0.31
50.50, 2, 84, 58, 0.31
50.60, 2, 84, 58, 0.31
50.70, 2, 84, 58, 0.31
50.80, 2, 84, 57, 0.31
50.90, 2, 84, 54, 0.30
51.00, 2, 84, 52, 0.30
51.10, 2, 84, 52, 0.30
51.20, 2, 84, 52, 0.30
51.30, 2, 84, 52, 0.30
51.40, 2, 84, 52, 0.30
51.50, 2, 84, 52, 0.30
51.60, 2, 84, 51, 0.29
52.60, 2, 84, 47, 0.29
52.70, 2, 84, 47, 0.29
52.80, 2, 84, 46, 0.29
52.90, 2, 84, 46, 0.29
53.00, 2, 84, 45, 0.29
53.10, 2, 84, 45, 0.29
53.20, 2, 84, 45, 0.29
53.30, 2, 84, 45, 0.29
run for 85
46.90, 2, 85, 89, 0.42
47.00, 2, 85, 86, 0.41
47.30, 2, 85, 83, 0.41
47.40, 2, 85, 82, 0.41
47.50, 2, 85, 82, 0.41
47.60, 2, 85, 81, 0.41
47.70, 2, 85, 79, 0.41
47.80, 2, 85, 75, 0.41
47.90, 2, 85, 74, 0.43
48.00, 2, 85, 74, 0.43
48.10, 2, 85, 74, 0.43
48.20, 2, 85, 72, 0.42
48.30, 2, 85, 71, 0.42
48.40, 2, 85, 71, 0.42
48.50, 2, 85, 70, 0.41
48.60, 2, 85, 70, 0.41
48.70, 2, 85, 70, 0.41
48.80, 2, 85, 70, 0.41
48.90, 2, 85, 70, 0.41
49.00, 2, 85, 70, 0.41
49.10, 2, 85, 69, 0.41
49.20, 2, 85, 69, 0.41
49.30, 2, 85, 68, 0.41
49.40, 2, 85, 68, 0.41
49.50, 2, 85, 65, 0.43
49.60, 2, 85, 63, 0.29
49.70, 2, 85, 62, 0.30
49.80, 2, 85, 62, 0.30
49.90, 2, 85, 62, 0.30
50.00, 2, 85, 62, 0.30
50.10, 2, 85, 62, 0.30
50.20, 2, 85, 62, 0.30
50.30, 2, 85, 61, 0.30
50.40, 2, 85, 58, 0.30
50.50, 2, 85, 57, 0.30
50.60, 2, 85, 56, 0.30
50.70, 2, 85, 56, 0.30
50.80, 2, 85, 55, 0.30
50.90, 2, 85, 55, 0.30
51.00, 2, 85, 55, 0.30
51.10, 2, 85, 55, 0.30
51.20, 2, 85, 54, 0.30
51.30, 2, 85, 54, 0.30
51.40, 2, 85, 52, 0.30
51.50, 2, 85, 52, 0.30
51.60, 2, 85, 52, 0.30
51.70, 2, 85, 52, 0.30
51.80, 2, 85, 51, 0.30
51.90, 2, 85, 50, 0.30
52.00, 2, 85, 50, 0.30
52.10, 2, 85, 50, 0.30
52.70, 2, 85, 47, 0.29
52.80, 2, 85, 47, 0.29
52.90, 2, 85, 47, 0.29
53.00, 2, 85, 47, 0.29
53.10, 2, 85, 47, 0.29
53.20, 2, 85, 47, 0.29
53.30, 2, 85, 47, 0.29
53.40, 2, 85, 47, 0.29
53.50, 2, 85, 47, 0.29
run for 86
47.10, 2, 86, 87, 0.41
47.20, 2, 86, 87, 0.41
47.80, 2, 86, 78, 0.41
47.90, 2, 86, 77, 0.41
48.00, 2, 86, 74, 0.41
48.10, 2, 86, 74, 0.41
48.20, 2, 86, 74, 0.42
48.30, 2, 86, 73, 0.41
48.40, 2, 86, 73, 0.41
48.50, 2, 86, 73, 0.41
48.60, 2, 86, 72, 0.42
48.70, 2, 86, 71, 0.42
48.80, 2, 86, 71, 0.42
48.90, 2, 86, 70, 0.40
49.00, 2, 86, 69, 0.41
49.10, 2, 86, 69, 0.41
49.20, 2, 86, 69, 0.41
49.30, 2, 86, 68, 0.41
49.40, 2, 86, 68, 0.41
49.50, 2, 86, 68, 0.41
49.60, 2, 86, 66, 0.40
49.70, 2, 86, 65, 0.41
49.80, 2, 86, 64, 0.41
49.90, 2, 86, 64, 0.41
50.00, 2, 86, 63, 0.29
50.10, 2, 86, 63, 0.29
50.20, 2, 86, 63, 0.29
50.30, 2, 86, 63, 0.29
50.40, 2, 86, 61, 0.29
50.50, 2, 86, 61, 0.29
50.60, 2, 86, 61, 0.29
50.70, 2, 86, 61, 0.29
50.80, 2, 86, 58, 0.30
50.90, 2, 86, 58, 0.30
51.00, 2, 86, 57, 0.29
51.10, 2, 86, 57, 0.29
51.20, 2, 86, 56, 0.29
51.30, 2, 86, 55, 0.29
51.40, 2, 86, 55, 0.29
51.50, 2, 86, 54, 0.30
51.60, 2, 86, 51, 0.30
51.70, 2, 86, 51, 0.30
51.80, 2, 86, 51, 0.30
51.90, 2, 86, 51, 0.30
52.00, 2, 86, 50, 0.30
52.10, 2, 86, 50, 0.30
52.20, 2, 86, 50, 0.30
52.30, 2, 86, 48, 0.30
52.40, 2, 86, 48, 0.30
52.50, 2, 86, 48, 0.30
52.60, 2, 86, 48, 0.30
52.70, 2, 86, 48, 0.30
52.80, 2, 86, 48, 0.30
52.90, 2, 86, 48, 0.30
53.00, 2, 86, 48, 0.30
53.10, 2, 86, 48, 0.30
53.20, 2, 86, 48, 0.30
53.30, 2, 86, 48, 0.30
53.40, 2, 86, 48, 0.30
53.50, 2, 86, 46, 0.30
53.60, 2, 86, 45, 0.29
53.70, 2, 86, 45, 0.29
53.80, 2, 86, 44, 0.30
53.90, 2, 86, 41, 0.30
54.00, 2, 86, 41, 0.30
54.10, 2, 86, 41, 0.30
54.20, 2, 86, 40, 0.31
54.30, 2, 86, 40, 0.31
run for 87
47.40, 2, 87, 87, 0.42
47.50, 2, 87, 83, 0.41
47.60, 2, 87, 83, 0.41
47.70, 2, 87, 83, 0.41
47.80, 2, 87, 83, 0.41
47.90, 2, 87, 83, 0.41
48.00, 2, 87, 81, 0.41
48.10, 2, 87, 81, 0.41
48.20, 2, 87, 79, 0.41
48.30, 2, 87, 79, 0.41
48.40, 2, 87, 78, 0.40
48.50, 2, 87, 77, 0.41
48.60, 2, 87, 76, 0.40
48.70, 2, 87, 74, 0.41
48.80, 2, 87, 74, 0.41
48.90, 2, 87, 74, 0.41
49.00, 2, 87, 74, 0.41
49.10, 2, 87, 72, 0.41
49.20, 2, 87, 71, 0.42
49.30, 2, 87, 69, 0.42
49.40, 2, 87, 68, 0.42
49.50, 2, 87, 67, 0.42
49.60, 2, 87, 66, 0.42
49.70, 2, 87, 66, 0.29
49.80, 2, 87, 65, 0.29
49.90, 2, 87, 64, 0.29
50.00, 2, 87, 64, 0.29
50.10, 2, 87, 63, 0.30
50.20, 2, 87, 63, 0.30
50.30, 2, 87, 63, 0.30
50.40, 2, 87, 63, 0.30
50.50, 2, 87, 62, 0.30
50.60, 2, 87, 59, 0.30
50.70, 2, 87, 58, 0.29
50.80, 2, 87, 58, 0.29
50.90, 2, 87, 58, 0.29
51.00, 2, 87, 57, 0.29
51.10, 2, 87, 57, 0.29
51.20, 2, 87, 57, 0.29
51.30, 2, 87, 56, 0.29
51.40, 2, 87, 56, 0.29
51.50, 2, 87, 55, 0.29
51.60, 2, 87, 53, 0.30
51.70, 2, 87, 53, 0.30
51.80, 2, 87, 53, 0.30
51.90, 2, 87, 52, 0.30
52.00, 2, 87, 50, 0.30
52.10, 2, 87, 50, 0.30
52.20, 2, 87, 50, 0.30
53.20, 2, 87, 46, 0.29
53.30, 2, 87, 46, 0.29
53.40, 2, 87, 46, 0.29
53.50, 2, 87, 46, 0.29
53.60, 2, 87, 46, 0.29
53.70, 2, 87, 46, 0.29
53.80, 2, 87, 44, 0.29
53.90, 2, 87, 44, 0.29
54.00, 2, 87, 44, 0.29
54.10, 2, 87, 44, 0.29
run for 88
47.10, 2, 88, 89, 0.41
47.20, 2, 88, 88, 0.41
47.30, 2, 88, 87, 0.41
47.40, 2, 88, 87, 0.41
47.50, 2, 88, 86, 0.41
47.60, 2, 88, 86, 0.41
47.70, 2, 88, 86, 0.41
47.80, 2, 88, 85, 0.41
47.90, 2, 88, 82, 0.41
48.00, 2, 88, 81, 0.41
48.10, 2, 88, 79, 0.41
48.20, 2, 88, 77, 0.41
48.30, 2, 88, 75, 0.41
48.40, 2, 88, 74, 0.41
48.50, 2, 88, 73, 0.41
48.60, 2, 88, 70, 0.42
48.70, 2, 88, 70, 0.42
48.80, 2, 88, 70, 0.42
48.90, 2, 88, 70, 0.42
49.00, 2, 88, 70, 0.42
49.10, 2, 88, 69, 0.43
49.20, 2, 88, 68, 0.42
49.30, 2, 88, 68, 0.42
49.40, 2, 88, 68, 0.42
49.50, 2, 88, 67, 0.42
49.60, 2, 88, 67, 0.42
49.70, 2, 88, 67, 0.42
49.80, 2, 88, 66, 0.31
49.90, 2, 88, 66, 0.29
50.00, 2, 88, 66, 0.29
50.10, 2, 88, 65, 0.29
50.20, 2, 88, 63, 0.30
50.30, 2, 88, 61, 0.29
50.40, 2, 88, 61, 0.29
50.50, 2, 88, 58, 0.30
50.60, 2, 88, 58, 0.30
50.70, 2, 88, 58, 0.30
50.80, 2, 88, 57, 0.29
50.90, 2, 88, 57, 0.29
51.00, 2, 88, 57, 0.29
51.10, 2, 88, 57, 0.29
51.20, 2, 88, 57, 0.29
51.30, 2, 88, 57, 0.29
51.40, 2, 88, 57, 0.29
51.50, 2, 88, 57, 0.29
51.60, 2, 88, 57, 0.29
51.70, 2, 88, 56, 0.29
51.80, 2, 88, 55, 0.28
51.90, 2, 88, 54, 0.29
52.00, 2, 88, 53, 0.29
52.10, 2, 88, 52, 0.29
52.20, 2, 88, 52, 0.29
52.30, 2, 88, 52, 0.29
52.40, 2, 88, 50, 0.30
52.50, 2, 88, 50, 0.30
52.60, 2, 88, 49, 0.29
52.80, 2, 88, 47, 0.29
52.90, 2, 88, 47, 0.29
53.00, 2, 88, 47, 0.29
53.10, 2, 88, 47, 0.29
53.20, 2, 88, 47, 0.29
53.30, 2, 88, 47, 0.29
53.40, 2, 88, 47, 0.29
53.50, 2, 88, 47, 0.29
53.60, 2, 88, 47, 0.29
53.70, 2, 88, 47, 0.29
53.80, 2, 88, 45, 0.30
53.90, 2, 88, 45, 0.30
run for 89
47.50, 2, 89, 89, 0.41
47.60, 2, 89, 87, 0.41
47.70, 2, 89, 83, 0.41
47.80, 2, 89, 82, 0.41
47.90, 2, 89, 82, 0.41
48.00, 2, 89, 80, 0.41
48.10, 2, 89, 79, 0.41
48.20, 2, 89, 77, 0.41
48.30, 2, 89, 75, 0.41
48.40, 2, 89, 75, 0.41
48.50, 2, 89, 75, 0.41
48.60, 2, 89, 75, 0.41
48.70, 2, 89, 74, 0.41
48.80, 2, 89, 72, 0.41
48.90, 2, 89, 72, 0.41
49.00, 2, 89, 72, 0.41
49.10, 2, 89, 72, 0.41
49.20, 2, 89, 72, 0.41
49.30, 2, 89, 72, 0.41
49.40, 2, 89, 71, 0.42
49.50, 2, 89, 71, 0.42
49.60, 2, 89, 70, 0.42
49.70, 2, 89, 67, 0.33
49.80, 2, 89, 66, 0.33
49.90, 2, 89, 65, 0.32
50.00, 2, 89, 65, 0.32
50.10, 2, 89, 65, 0.29
50.20, 2, 89, 63, 0.30
50.30, 2, 89, 62, 0.30
50.40, 2, 89, 60, 0.30
50.50, 2, 89, 60, 0.30
50.60, 2, 89, 60, 0.30
50.70, 2, 89, 58, 0.29
50.80, 2, 89, 58, 0.29
50.90, 2, 89, 58, 0.29
51.00, 2, 89, 58, 0.29
51.10, 2, 89, 58, 0.29
51.20, 2, 89, 58, 0.29
51.30, 2, 89, 57, 0.29
51.40, 2, 89, 57, 0.29
51.50, 2, 89, 57, 0.29
51.60, 2, 89, 56, 0.29
51.70, 2, 89, 56, 0.29
51.80, 2, 89, 55, 0.29
51.90, 2, 89, 53, 0.30
52.00, 2, 89, 52, 0.29
52.10, 2, 89, 51, 0.30
52.20, 2, 89, 51, 0.30
52.30, 2, 89, 51, 0.30
52.40, 2, 89, 50, 0.30
52.50, 2, 89, 50, 0.30
52.60, 2, 89, 50, 0.30
54.20, 2, 89, 44, 0.29
54.30, 2, 89, 44, 0.29
run for 90
47.40, 2, 90, 89, 0.41
47.50, 2, 90, 89, 0.41
47.60, 2, 90, 89, 0.41
47.70, 2, 90, 87, 0.41
47.80, 2, 90, 86, 0.41
47.90, 2, 90, 86, 0.41
48.00, 2, 90, 86, 0.41
48.10, 2, 90, 86, 0.41
48.20, 2, 90, 85, 0.41
48.30, 2, 90, 83, 0.41
48.40, 2, 90, 81, 0.41
48.50, 2, 90, 81, 0.41
48.60, 2, 90, 77, 0.41
48.70, 2, 90, 76, 0.41
48.80, 2, 90, 74, 0.42
48.90, 2, 90, 74, 0.42
49.00, 2, 90, 73, 0.42
49.10, 2, 90, 71, 0.42
49.20, 2, 90, 70, 0.42
49.30, 2, 90, 70, 0.42
49.40, 2, 90, 70, 0.42
49.50, 2, 90, 70, 0.42
49.60, 2, 90, 68, 0.42
49.70, 2, 90, 67, 0.42
49.80, 2, 90, 67, 0.42
49.90, 2, 90, 67, 0.42
50.00, 2, 90, 67, 0.31
50.10, 2, 90, 66, 0.32
50.20, 2, 90, 65, 0.32
50.30, 2, 90, 65, 0.29
50.40, 2, 90, 64, 0.30
50.50, 2, 90, 64, 0.30
50.60, 2, 90, 64, 0.30
50.70, 2, 90, 61, 0.30
50.80, 2, 90, 60, 0.30
50.90, 2, 90, 60, 0.30
51.00, 2, 90, 60, 0.30
51.10, 2, 90, 59, 0.30
51.20, 2, 90, 57, 0.29
51.30, 2, 90, 57, 0.29
51.40, 2, 90, 56, 0.30
51.50, 2, 90, 55, 0.30
51.60, 2, 90, 54, 0.30
51.70, 2, 90, 54, 0.30
51.80, 2, 90, 53, 0.30
51.90, 2, 90, 53, 0.30
52.00, 2, 90, 53, 0.29
52.10, 2, 90, 53, 0.29
52.20, 2, 90, 53, 0.29
52.30, 2, 90, 51, 0.29
52.40, 2, 90, 51, 0.29
52.50, 2, 90, 51, 0.29
52.60, 2, 90, 49, 0.29
53.70, 2, 90, 47, 0.29
53.80, 2, 90, 47, 0.29
53.90, 2, 90, 47, 0.29
54.00, 2, 90, 47, 0.29
54.10, 2, 90, 46, 0.29
54.20, 2, 90, 46, 0.29
54.30, 2, 90, 46, 0.29
54.40, 2, 90, 45, 0.29
run for 91
47.50, 2, 91, 89, 0.41
47.60, 2, 91, 89, 0.41
47.70, 2, 91, 87, 0.41
47.80, 2, 91, 87, 0.41
47.90, 2, 91, 87, 0.41
48.00, 2, 91, 85, 0.41
48.10, 2, 91, 85, 0.41
48.20, 2, 91, 82, 0.41
48.30, 2, 91, 81, 0.41
48.40, 2, 91, 81, 0.41
48.50, 2, 91, 77, 0.41
48.60, 2, 91, 77, 0.41
48.70, 2, 91, 77, 0.41
48.80, 2, 91, 76, 0.41
48.90, 2, 91, 74, 0.41
49.00, 2, 91, 74, 0.41
49.10, 2, 91, 74, 0.41
49.20, 2, 91, 74, 0.41
49.30, 2, 91, 74, 0.41
49.40, 2, 91, 74, 0.41
49.50, 2, 91, 74, 0.41
49.60, 2, 91, 71, 0.41
49.70, 2, 91, 70, 0.41
49.80, 2, 91, 69, 0.41
49.90, 2, 91, 69, 0.40
50.00, 2, 91, 69, 0.40
50.10, 2, 91, 68, 0.28
50.20, 2, 91, 66, 0.29
50.30, 2, 91, 66, 0.29
50.40, 2, 91, 64, 0.29
50.50, 2, 91, 64, 0.29
50.60, 2, 91, 64, 0.29
50.70, 2, 91, 61, 0.30
50.80, 2, 91, 61, 0.30
50.90, 2, 91, 60, 0.30
51.00, 2, 91, 59, 0.30
51.10, 2, 91, 58, 0.30
51.20, 2, 91, 58, 0.30
51.30, 2, 91, 57, 0.29
51.40, 2, 91, 57, 0.29
51.50, 2, 91, 57, 0.29
51.60, 2, 91, 56, 0.29
51.70, 2, 91, 55, 0.29
51.80, 2, 91, 54, 0.30
51.90, 2, 91, 53, 0.29
52.00, 2, 91, 53, 0.29
52.10, 2, 91, 53, 0.29
52.20, 2, 91, 52, 0.29
52.30, 2, 91, 52, 0.29
52.40, 2, 91, 52, 0.29
52.50, 2, 91, 51, 0.29
52.60, 2, 91, 51, 0.29
52.70, 2, 91, 51, 0.29
54.20, 2, 91, 45, 0.29
54.30, 2, 91, 45, 0.29
54.40, 2, 91, 44, 0.29
54.50, 2, 91, 44, 0.29
run for 92
47.60, 2, 92, 89, 0.41
47.70, 2, 92, 89, 0.41
47.80, 2, 92, 89, 0.41
47.90, 2, 92, 88, 0.41
48.00, 2, 92, 87, 0.41
48.10, 2, 92, 86, 0.41
48.20, 2, 92, 84, 0.41
48.30, 2, 92, 83, 0.41
48.40, 2, 92, 82, 0.42
48.50, 2, 92, 81, 0.41
48.60, 2, 92, 77, 0.41
48.70, 2, 92, 77, 0.41
48.80, 2, 92, 75, 0.41
48.90, 2, 92, 75, 0.41
49.00, 2, 92, 74, 0.41
49.10, 2, 92, 74, 0.41
49.20, 2, 92, 74, 0.41
49.30, 2, 92, 74, 0.41
49.40, 2, 92, 73, 0.41
49.50, 2, 92, 73, 0.41
49.60, 2, 92, 73, 0.41
49.70, 2, 92, 73, 0.41
49.80, 2, 92, 72, 0.41
49.90, 2, 92, 71, 0.42
50.00, 2, 92, 69, 0.43
50.10, 2, 92, 69, 0.43
50.20, 2, 92, 68, 0.43
50.30, 2, 92, 68, 0.30
50.40, 2, 92, 66, 0.29
50.50, 2, 92, 65, 0.29
50.60, 2, 92, 64, 0.29
50.70, 2, 92, 63, 0.29
50.80, 2, 92, 61, 0.30
50.90, 2, 92, 61, 0.30
51.00, 2, 92, 61, 0.30
51.10, 2, 92, 60, 0.30
51.20, 2, 92, 60, 0.30
51.30, 2, 92, 60, 0.30
51.40, 2, 92, 59, 0.29
51.50, 2, 92, 58, 0.29
51.60, 2, 92, 58, 0.29
51.70, 2, 92, 56, 0.29
51.80, 2, 92, 56, 0.29
51.90, 2, 92, 56, 0.29
52.00, 2, 92, 56, 0.29
52.10, 2, 92, 56, 0.29
52.20, 2, 92, 54, 0.30
52.30, 2, 92, 54, 0.30
52.40, 2, 92, 52, 0.29
52.50, 2, 92, 52, 0.29
52.60, 2, 92, 51, 0.29
52.70, 2, 92, 51, 0.29
52.80, 2, 92, 51, 0.29
52.90, 2, 92, 51, 0.29
53.00, 2, 92, 51, 0.29
53.10, 2, 92, 51, 0.29
53.20, 2, 92, 51, 0.29
53.30, 2, 92, 51, 0.29
53.40, 2, 92, 51, 0.29
53.50, 2, 92, 51, 0.29
53.60, 2, 92, 51, 0.29
53.70, 2, 92, 50, 0.29
run for 93
47.80, 2, 93, 89, 0.41
47.90, 2, 93, 88, 0.41
48.00, 2, 93, 86, 0.41
48.10, 2, 93, 85, 0.41
48.20, 2, 93, 85, 0.41
48.30, 2, 93, 85, 0.41
48.40, 2, 93, 84, 0.41
48.50, 2, 93, 83, 0.41
48.60, 2, 93, 83, 0.41
48.70, 2, 93, 81, 0.41
48.80, 2, 93, 80, 0.41
48.90, 2, 93, 78, 0.41
49.00, 2, 93, 78, 0.41
49.10, 2, 93, 78, 0.41
49.20, 2, 93, 78, 0.41
49.30, 2, 93, 73, 0.42
49.40, 2, 93, 73, 0.42
49.50, 2, 93, 73, 0.42
49.60, 2, 93, 73, 0.42
49.70, 2, 93, 71, 0.42
49.80, 2, 93, 71, 0.42
49.90, 2, 93, 71, 0.42
50.00, 2, 93, 70, 0.42
50.10, 2, 93, 70, 0.32
50.20, 2, 93, 69, 0.31
50.30, 2, 93, 69, 0.28
50.40, 2, 93, 69, 0.28
50.50, 2, 93, 68, 0.28
50.60, 2, 93, 66, 0.29
50.70, 2, 93, 66, 0.29
50.80, 2, 93, 64, 0.30
50.90, 2, 93, 64, 0.30
51.00, 2, 93, 62, 0.30
51.10, 2, 93, 62, 0.30
51.20, 2, 93, 61, 0.30
51.30, 2, 93, 61, 0.30
51.40, 2, 93, 59, 0.30
51.50, 2, 93, 58, 0.30
51.60, 2, 93, 58, 0.30
51.70, 2, 93, 57, 0.29
51.80, 2, 93, 56, 0.30
51.90, 2, 93, 55, 0.30
52.00, 2, 93, 55, 0.30
52.10, 2, 93, 55, 0.30
52.20, 2, 93, 54, 0.30
52.30, 2, 93, 54, 0.30
52.40, 2, 93, 53, 0.29
52.50, 2, 93, 52, 0.29
52.60, 2, 93, 52, 0.29
52.70, 2, 93, 52, 0.29
52.80, 2, 93, 51, 0.29
52.90, 2, 93, 51, 0.29
53.00, 2, 93, 51, 0.29
53.10, 2, 93, 50, 0.30
run for 94
48.00, 2, 94, 89, 0.41
48.10, 2, 94, 89, 0.41
48.20, 2, 94, 89, 0.41
48.30, 2, 94, 87, 0.41
48.40, 2, 94, 85, 0.41
48.50, 2, 94, 85, 0.41
48.60, 2, 94, 84, 0.41
48.70, 2, 94, 83, 0.41
48.80, 2, 94, 82, 0.41
48.90, 2, 94, 77, 0.41
49.00, 2, 94, 76, 0.41
49.10, 2, 94, 74, 0.41
49.20, 2, 94, 73, 0.42
49.30, 2, 94, 73, 0.42
49.40, 2, 94, 72, 0.42
49.50, 2, 94, 72, 0.42
49.60, 2, 94, 72, 0.42
49.70, 2, 94, 72, 0.42
49.80, 2, 94, 72, 0.42
49.90, 2, 94, 72, 0.42
50.00, 2, 94, 70, 0.41
50.10, 2, 94, 70, 0.41
50.20, 2, 94, 69, 0.41
50.30, 2, 94, 69, 0.28
50.40, 2, 94, 68, 0.29
50.50, 2, 94, 68, 0.29
50.60, 2, 94, 67, 0.29
50.70, 2, 94, 66, 0.29
50.80, 2, 94, 65, 0.29
50.90, 2, 94, 65, 0.29
51.00, 2, 94, 64, 0.29
51.10, 2, 94, 64, 0.29
51.20, 2, 94, 62, 0.30
51.30, 2, 94, 62, 0.30
51.40, 2, 94, 62, 0.30
51.50, 2, 94, 61, 0.29
51.60, 2, 94, 60, 0.29
51.70, 2, 94, 60, 0.29
51.80, 2, 94, 57, 0.29
51.90, 2, 94, 57, 0.29
52.00, 2, 94, 57, 0.29
52.10, 2, 94, 56, 0.30
52.20, 2, 94, 56, 0.30
52.30, 2, 94, 56, 0.30
52.40, 2, 94, 55, 0.29
52.50, 2, 94, 54, 0.29
52.60, 2, 94, 53, 0.29
52.70, 2, 94, 53, 0.29
52.80, 2, 94, 53, 0.29
52.90, 2, 94, 53, 0.29
53.00, 2, 94, 52, 0.30
53.10, 2, 94, 52, 0.30
53.20, 2, 94, 52, 0.30
53.30, 2, 94, 52, 0.30
53.40, 2, 94, 52, 0.30
53.50, 2, 94, 52, 0.30
53.60, 2, 94, 51, 0.29
53.70, 2, 94, 51, 0.29
53.80, 2, 94, 51, 0.29
53.90, 2, 94, 50, 0.29
54.00, 2, 94, 49, 0.29
run for 95
48.00, 2, 95, 89, 0.41
48.10, 2, 95, 89, 0.41
48.20, 2, 95, 87, 0.41
48.30, 2, 95, 86, 0.41
48.40, 2, 95, 85, 0.41
48.50, 2, 95, 84, 0.41
48.60, 2, 95, 84, 0.41
48.70, 2, 95, 83, 0.41
48.80, 2, 95, 83, 0.41
48.90, 2, 95, 81, 0.41
49.00, 2, 95, 79, 0.41
49.10, 2, 95, 78, 0.41
49.20, 2, 95, 78, 0.41
49.30, 2, 95, 78, 0.41
49.40, 2, 95, 77, 0.41
49.50, 2, 95, 75, 0.41
49.60, 2, 95, 75, 0.41
49.70, 2, 95, 75, 0.41
49.80, 2, 95, 75, 0.41
49.90, 2, 95, 75, 0.41
50.00, 2, 95, 74, 0.41
50.10, 2, 95, 72, 0.40
50.20, 2, 95, 71, 0.40
50.30, 2, 95, 70, 0.31
50.40, 2, 95, 69, 0.31
50.50, 2, 95, 69, 0.28
50.60, 2, 95, 68, 0.28
50.70, 2, 95, 67, 0.28
50.80, 2, 95, 66, 0.29
50.90, 2, 95, 66, 0.29
51.00, 2, 95, 64, 0.30
51.10, 2, 95, 63, 0.30
51.20, 2, 95, 62, 0.30
51.30, 2, 95, 62, 0.30
51.40, 2, 95, 61, 0.30
51.50, 2, 95, 60, 0.30
51.60, 2, 95, 59, 0.30
51.70, 2, 95, 59, 0.30
51.80, 2, 95, 59, 0.30
51.90, 2, 95, 57, 0.29
52.00, 2, 95, 55, 0.29
52.10, 2, 95, 55, 0.29
52.20, 2, 95, 55, 0.29
52.30, 2, 95, 55, 0.29
52.40, 2, 95, 55, 0.29
52.50, 2, 95, 55, 0.29
52.60, 2, 95, 54, 0.29
52.70, 2, 95, 52, 0.30
52.80, 2, 95, 51, 0.29
52.90, 2, 95, 51, 0.29
53.00, 2, 95, 51, 0.29
53.10, 2, 95, 51, 0.29
53.20, 2, 95, 51, 0.29
53.30, 2, 95, 51, 0.29
53.40, 2, 95, 51, 0.29
53.50, 2, 95, 51, 0.29
53.60, 2, 95, 51, 0.29
54.30, 2, 95, 46, 0.29
54.40, 2, 95, 46, 0.29
54.50, 2, 95, 46, 0.29
54.60, 2, 95, 46, 0.29
54.70, 2, 95, 45, 0.29
54.80, 2, 95, 44, 0.29
54.90, 2, 95, 44, 0.29
run for 96
48.30, 2, 96, 88, 0.41
48.40, 2, 96, 86, 0.41
48.50, 2, 96, 85, 0.41
48.60, 2, 96, 85, 0.41
48.70, 2, 96, 84, 0.41
48.80, 2, 96, 83, 0.41
48.90, 2, 96, 80, 0.40
49.00, 2, 96, 79, 0.40
49.10, 2, 96, 78, 0.41
49.20, 2, 96, 78, 0.41
49.30, 2, 96, 77, 0.41
49.40, 2, 96, 77, 0.41
49.50, 2, 96, 76, 0.41
49.60, 2, 96, 75, 0.42
49.70, 2, 96, 75, 0.42
49.80, 2, 96, 75, 0.42
49.90, 2, 96, 74, 0.42
50.00, 2, 96, 73, 0.42
50.10, 2, 96, 71, 0.32
50.20, 2, 96, 70, 0.31
50.30, 2, 96, 70, 0.31
50.40, 2, 96, 69, 0.31
50.50, 2, 96, 68, 0.31
50.60, 2, 96, 68, 0.29
50.70, 2, 96, 68, 0.29
50.80, 2, 96, 67, 0.29
50.90, 2, 96, 66, 0.28
51.00, 2, 96, 65, 0.29
51.10, 2, 96, 65, 0.29
51.20, 2, 96, 64, 0.29
51.30, 2, 96, 64, 0.29
51.40, 2, 96, 64, 0.29
51.50, 2, 96, 63, 0.29
51.60, 2, 96, 61, 0.30
51.70, 2, 96, 61, 0.30
51.80, 2, 96, 60, 0.30
51.90, 2, 96, 60, 0.30
52.00, 2, 96, 59, 0.29
52.10, 2, 96, 57, 0.29
52.20, 2, 96, 56, 0.29
52.30, 2, 96, 56, 0.29
52.40, 2, 96, 56, 0.29
52.50, 2, 96, 53, 0.29
52.60, 2, 96, 53, 0.29
52.70, 2, 96, 53, 0.29
52.80, 2, 96, 52, 0.29
52.90, 2, 96, 52, 0.29
53.00, 2, 96, 51, 0.30
53.10, 2, 96, 51, 0.29
53.20, 2, 96, 51, 0.29
53.30, 2, 96, 51, 0.29
53.40, 2, 96, 51, 0.29
53.50, 2, 96, 50, 0.29
53.60, 2, 96, 50, 0.29
53.70, 2, 96, 50, 0.29
54.60, 2, 96, 46, 0.30
54.70, 2, 96, 44, 0.29
54.80, 2, 96, 44, 0.29
54.90, 2, 96, 44, 0.29
55.00, 2, 96, 44, 0.29
55.10, 2, 96, 44, 0.29
55.20, 2, 96, 44, 0.29
55.30, 2, 96, 44, 0.29
run for 97
48.30, 2, 97, 89, 0.41
48.40, 2, 97, 88, 0.41
48.50, 2, 97, 87, 0.41
48.60, 2, 97, 86, 0.41
48.70, 2, 97, 85, 0.41
48.80, 2, 97, 84, 0.41
48.90, 2, 97, 84, 0.41
49.00, 2, 97, 84, 0.41
49.10, 2, 97, 82, 0.41
49.20, 2, 97, 81, 0.41
49.30, 2, 97, 79, 0.40
49.40, 2, 97, 79, 0.40
49.50, 2, 97, 78, 0.41
49.60, 2, 97, 78, 0.41
49.70, 2, 97, 76, 0.41
49.80, 2, 97, 76, 0.41
49.90, 2, 97, 76, 0.41
50.00, 2, 97, 76, 0.41
50.10, 2, 97, 76, 0.41
50.20, 2, 97, 75, 0.41
50.30, 2, 97, 75, 0.41
50.40, 2, 97, 75, 0.28
50.50, 2, 97, 71, 0.29
50.60, 2, 97, 69, 0.30
50.70, 2, 97, 69, 0.30
50.80, 2, 97, 68, 0.28
50.90, 2, 97, 67, 0.28
51.00, 2, 97, 67, 0.28
51.10, 2, 97, 67, 0.28
51.20, 2, 97, 67, 0.28
51.30, 2, 97, 64, 0.29
51.40, 2, 97, 64, 0.29
51.50, 2, 97, 64, 0.29
51.60, 2, 97, 63, 0.28
51.70, 2, 97, 60, 0.29
51.80, 2, 97, 59, 0.29
51.90, 2, 97, 58, 0.29
52.00, 2, 97, 58, 0.29
52.10, 2, 97, 58, 0.29
52.20, 2, 97, 58, 0.29
52.30, 2, 97, 58, 0.29
52.40, 2, 97, 57, 0.29
52.50, 2, 97, 55, 0.29
52.60, 2, 97, 54, 0.29
52.70, 2, 97, 54, 0.29
52.80, 2, 97, 54, 0.29
52.90, 2, 97, 53, 0.29
53.00, 2, 97, 52, 0.29
53.10, 2, 97, 52, 0.29
54.90, 2, 97, 45, 0.29
55.00, 2, 97, 45, 0.29
55.10, 2, 97, 45, 0.29
55.20, 2, 97, 44, 0.29
run for 98
48.40, 2, 98, 88, 0.41
48.50, 2, 98, 88, 0.41
48.60, 2, 98, 86, 0.41
48.70, 2, 98, 86, 0.41
48.80, 2, 98, 86, 0.41
48.90, 2, 98, 85, 0.41
49.00, 2, 98, 84, 0.41
49.10, 2, 98, 83, 0.41
49.20, 2, 98, 83, 0.41
49.30, 2, 98, 83, 0.41
49.40, 2, 98, 83, 0.41
49.50, 2, 98, 81, 0.40
49.60, 2, 98, 80, 0.40
49.70, 2, 98, 80, 0.40
49.80, 2, 98, 79, 0.40
49.90, 2, 98, 79, 0.40
50.00, 2, 98, 76, 0.40
50.10, 2, 98, 76, 0.40
50.20, 2, 98, 76, 0.40
50.30, 2, 98, 75, 0.41
50.40, 2, 98, 73, 0.43
50.50, 2, 98, 69, 0.31
50.60, 2, 98, 69, 0.28
50.70, 2, 98, 69, 0.29
50.80, 2, 98, 69, 0.29
50.90, 2, 98, 68, 0.29
51.00, 2, 98, 68, 0.29
51.10, 2, 98, 67, 0.29
51.20, 2, 98, 67, 0.29
51.30, 2, 98, 65, 0.29
51.40, 2, 98, 64, 0.29
51.50, 2, 98, 64, 0.29
51.60, 2, 98, 64, 0.29
51.70, 2, 98, 61, 0.30
51.80, 2, 98, 60, 0.30
51.90, 2, 98, 58, 0.30
52.00, 2, 98, 58, 0.30
52.10, 2, 98, 58, 0.30
52.20, 2, 98, 57, 0.29
52.30, 2, 98, 57, 0.29
52.40, 2, 98, 56, 0.30
52.50, 2, 98, 56, 0.30
52.60, 2, 98, 56, 0.30
52.70, 2, 98, 55, 0.29
52.80, 2, 98, 54, 0.29
52.90, 2, 98, 54, 0.29
53.00, 2, 98, 53, 0.29
53.10, 2, 98, 53, 0.29
53.20, 2, 98, 53, 0.29
53.30, 2, 98, 53, 0.29
53.40, 2, 98, 53, 0.29
53.50, 2, 98, 52, 0.29
53.60, 2, 98, 51, 0.29
53.70, 2, 98, 50, 0.29
53.80, 2, 98, 50, 0.29
run for 99
48.40, 2, 99, 89, 0.41
48.50, 2, 99, 89, 0.41
48.60, 2, 99, 88, 0.41
48.70, 2, 99, 87, 0.41
48.80, 2, 99, 85, 0.41
48.90, 2, 99, 85, 0.41
49.00, 2, 99, 85, 0.41
49.10, 2, 99, 84, 0.41
49.20, 2, 99, 80, 0.40
49.30, 2, 99, 80, 0.40
49.40, 2, 99, 80, 0.40
49.50, 2, 99, 80, 0.40
49.60, 2, 99, 76, 0.41
49.70, 2, 99, 76, 0.41
49.80, 2, 99, 76, 0.41
49.90, 2, 99, 76, 0.41
50.00, 2, 99, 76, 0.41
50.10, 2, 99, 76, 0.41
50.20, 2, 99, 75, 0.42
50.30, 2, 99, 75, 0.42
50.40, 2, 99, 75, 0.42
50.50, 2, 99, 75, 0.42
50.60, 2, 99, 74, 0.29
50.70, 2, 99, 73, 0.29
50.80, 2, 99, 73, 0.29
50.90, 2, 99, 71, 0.28
51.00, 2, 99, 69, 0.28
51.10, 2, 99, 69, 0.28
51.20, 2, 99, 69, 0.28
51.30, 2, 99, 68, 0.28
51.40, 2, 99, 67, 0.28
51.50, 2, 99, 65, 0.29
51.60, 2, 99, 64, 0.29
51.70, 2, 99, 63, 0.29
51.80, 2, 99, 62, 0.28
51.90, 2, 99, 61, 0.28
52.00, 2, 99, 61, 0.28
52.10, 2, 99, 59, 0.29
52.20, 2, 99, 58, 0.29
52.30, 2, 99, 58, 0.29
52.40, 2, 99, 58, 0.29
52.50, 2, 99, 58, 0.29
52.60, 2, 99, 58, 0.29
52.70, 2, 99, 58, 0.29
52.80, 2, 99, 58, 0.29
52.90, 2, 99, 55, 0.29
53.00, 2, 99, 53, 0.30
53.10, 2, 99, 53, 0.30
53.20, 2, 99, 53, 0.29
53.30, 2, 99, 52, 0.29
53.40, 2, 99, 51, 0.29
In [197]:
features.shape
pca = PCA(n_components=2)
In [201]:
i,j,k = 31.90, 4, 17
pca = PCA(n_components=k).fit_transform(features)
dbscan = DBSCAN(eps=i, min_samples=j)
dbscan.fit(pca)
print(homogeneity_score(dbscan.labels_, real_labels))
# print(silhouette_score(features, kmeans.labels_))
groups = convert_to_list_of_cluster(names, dbscan.labels_)
for i in groups.values():
    show_cluster(i)
0.5574183307675823
In [212]:
len(groups[-1])
Out[212]:
59
In [213]:
pca_2d = PCA(n_components=2).fit_transform(features)

fig = plt.figure()
plt.scatter(pca_2d[:, 0], pca_2d[:, 1], c=dbscan.labels_, cmap='viridis')
plt.title('DBScan Clustering with PCA')
Out[213]:
Text(0.5, 1.0, 'DBScan Clustering with PCA')
In [214]:
pca_3d = PCA(n_components=3).fit_transform(features)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(pca_3d[:, 0], pca_3d[:, 1], pca_3d[:, 2], c=dbscan.labels_, cmap='viridis')
ax.set_title('DBScan Clustering with 3D PCA')
plt.show()